package com.java.tools;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class objectTools {

	/**
	 * object的使用：equals
	 */
	@Test
	void test01() {
		// Object中equals等同于“==”的使用
		Object obj = "yi";
		boolean isOK = obj.equals("yi");
		System.out.println("isOK=" + isOK);
		Object obj1 = "yi";
		System.out.println("obj == obj1::" + (obj == obj1));
		System.out.println("=================");

		// 对比String类型的equals，equals指内容，“==”指地址
		String str = "la";
		boolean isOK1 = str.equals("la");
		System.out.println("isOK1=" + isOK1);
		String str1 = new String("la");
		System.out.println("str==str1::" + (str == str1));
	}

	/**
	 * Object的使用:hashcode的用法
	 */
	@Test
	void test02() {
		// 定义一个String类型的变量
		String str = "小明";
		String str1 = new String("小明");
		System.out.println(str.hashCode());
		System.out.println(str1.hashCode());//相等
	}
	

	/**
	 * Object的使用:hashcode的用法
	 */
	@Test
	void test03() {
		// 创建2个学生对象
		Student stu = new Student("王红", "女", 20, 98);
		Student stu1 = new Student("王红", "女", 20, 98);
		// 因为使用new创建了另一个学生对象，所以地址判断不相等
		System.out.println("stu.equals(stu1)::" + stu.equals(stu1));

		System.out.println(stu.hashCode());
		System.out.println(stu1.hashCode());
	}

	@Test
	public void test04() {
		Object obj = "";
		boolean isOk = obj.equals("");// true
		System.out.println("isOK::" + isOk);

		String str = "";

		System.out.println("" + str.equals(""));// true
	}

	@Test
	public void test05() {

		String str = "小明";
		String str1 = new String("小明");
		System.out.println(str.hashCode());
		System.out.println(str1.hashCode());// 相等
	}

	@Test
	public void test06() {
		// 创建两个学生对象
		Student stu0 = new Student("张三", "男", 21, 84);
		Student stu1 = new Student("张三", "男", 21, 84);
		System.out.println("stu0.equals(stu1)::" + stu0.equals(stu1));

		System.out.println(stu0.hashCode());
		System.out.println(stu1.hashCode());
	}
}
